#使用内建宏定义和"@"字符打头的命令更新后的makefile
define CC
gcc
endef

OPTIONS = -O3 -o
# 找到目录下所有.c文件，然后替换出.o文件
SOURCES := $(wildcard *.c) #main.c compute.c input.c
OBJECTS := $(patsubst %.c, %.o, $(SOURCES)) #main.o compute.o input.o
HEADERS = main.h compute.h input.h
ARCHIVE = compute.o input.o
LIBRARY = mathlib.a
AR_KEYS = qv

complete:power
	@echo "构建完毕!"

# 找到.c文件所引用的头文件
include $(OBJS:.o=.d)
%.d: %.c
		@set -e; rm -f $@;\
		$(CC) -MM $(CFLAGS) $< > $@.$$$$;\
		sed 's,\($*\)\.o[:]*,\1.o $@:,g' < $@.$$$$ > $@;\
		rm -f $@.$$$$;\
		rm -f $@

power:$(OBJECTS)
	# $@ : 构建目标
	# $^ : 所有依赖文件
	# $< : 第一个依赖文件 
	$(CC) $(OPTIONS) $@ $^ -lm
	@echo "可执行代码已保存到power文件。"
	@echo
	@echo "正在创建归档文件..."
	ar $(AR_KEYS) $(LIBRARY) $(ARCHIVE)
	@echo
	@echo "归档文件创建完毕。"
	@echo	

all.tar:$(SOURCES) $(HEADERS) makefile
	tar -cvf -$^ > all.tar

#假想目标clean
.PHONY:clean
clean:
	rm -f *.o *.a power
